#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>

/*
 * 时间格式化函数strftime和strptime 
 */

/*
	这两个函数都是时间日期的格式控制函数，在功能上看起来正好相反。

	strftime将一个struct tm结构格式化为一个字符串，

	strptime则是将一个字符串格式化为一个struct  tm结构。


	strftime
	函数原型：size_t strftime(char *s,size_t maxsize,char *format,conststruct tm *timeptr)


	strftime函数对timeptr指向的tm结构所代表的时间和日期进行格式编排，其结果放在字符串s中。

	该字符串的长度被设置为(最少)maxsize个字符。格式字符串format用来对写入字符串的字符进行控制，

	它包含着将被传送到字符串里去的普通字符以及编排时间和日期格式的转换控制符。

	输入：const struct tm *timeptr
	输出：char *s,size_t maxsize,char *format


		转换控制符
		说明
		%a
		星期几的简写形式
		%A
		星期几的全称
		%b
		月份的简写形式
		%B
		月份的全称
		%c
		日期和时间
		%d
		月份中的日期,0-31
		%H
		小时,00-23
		%I
		12进制小时钟点,01-12
		%j
		年份中的日期,001-366
		%m
		年份中的月份,01-12
		%M
		分,00-59
		%p
		上午或下午
		%S
		秒,00-60
		%u
		星期几,1-7
		%w
		星期几,0-6
		%x
		当地格式的日期
		%X
		当地格式的时间
		%y
		年份中的最后两位数,00-99
		%Y
		年
		%Z
		地理时区名称

	
	strptime
	函数原型: char *strptime(const char *buf,const char*format,struct tm *timeptr)

	format字符串的构建方式和strftime的format字符串完全一样,strptime返回一个指针，
	
	指向转换过程处理的最后一个字符后面的那个字符,


	输入：const char *buf,const char *format
	输出：struct tm *timeptr

*/

void strptime_test()
{
  struct tm tm;
  char buf[255] = {0};

  strptime("12/Sep/2016:15:39:40", "%d/%b/%Y:%H:%M:%S", &tm);
  printf("asctime:%s\n", asctime(&tm));

  strftime(buf, sizeof(buf), "%d %b %Y %H:%M:%S", &tm);
  puts(buf);
}

void main()
{
  char strtime[20] = {0};
  time_t timep;
  struct tm * ptm;

  timep = time(NULL);
  ptm = localtime(&timep);
  strftime(strtime, sizeof(strtime), "%Y-%m-%d %H:%M:%S", ptm);
  //puts(strtime);

  strptime_test();
}
